import box/{condit,logger} shell/termux

shift

if ! Has-Termux-Plugin api && ! Has-Pkg termux-api;then
  Err "请安装依赖应用 com.termux.api & 软件包 termux-api"
  exit
fi


#### 字体颜色
## 正常颜色
h01="\033[31m";   # 红
h02="\033[32m";   # 绿
h03="\033[36m";   # 蓝
h04="\033[33m";   # 黄
h07="\033[30m";   # 黑
h09="\033[35m";   # 紫
h10="\033[37m";   # 白
h11="\033[34m";   # 深蓝
## 加粗混色
h13="\033[1;30m";# 深灰
h14="\033[1;31m";# 深红
h15="\033[1;32m";# 深绿
h16="\033[1;33m";# 亮黄
h17="\033[1;34m";# 深蓝
h18="\033[1;35m";# 暗紫
h19="\033[1;36m";# 亮蓝
h20="\033[1;37m";# 浅灰
## 特殊效果
h12="\033[4m";     # 下划线
h06="\033[0m";     # 取消效果

# 命令
cmd=(
audio-info
battery-status
brightness
call-log
camera-info
camera-photo
clipboard-get
clipboard-set
contact-list
download
fingerprint
job-scheduler
keystore
location
media-player
media-scan
microphone-record
notification
notification-list
notification-remove
sensor
share
sms-list
sms-send
speech-to-text
storage-get
telephony-call
telephony-cellinfo
telephony-deviceinfo
toast
torch
tts-engines
tts-speak
usb
vibrate
volume
wallpaper
wifi-connectioninfo
wifi-enable
wifi-scaninfo
)

# 帮助
help=(
"获取有关音频功能的信息。"

"获取设备电池状态。"

"用法：[命令] [值: 0至255]\n将屏幕亮度设置在0到255之间或自动。"

"用法：[命令] [-l limit] [-o offset]\n列出历史通话记录。\n可选项	功能\n-l limit	设置输出通话记录列表的限制（默认\$PARAM_LIMIT）\n-o offset	设置输出通话记录列表的偏移量（默认\$PARAM_OFFSET）"

"获取有关设备相机的信息。"

"用法：[命令] [-c camera-id] [文件名]\n拍照并保存为JPEG格式的文件。\n可选项功能:\n-c camera-id	要使用的相机的ID （参见 termux-camera-info）, 默认：0"

"获取系统剪贴板文字。"

"用法：[命令] [文本]\n设置系统剪贴板文字。文本支持从参数设置或在未提供参数时从标准输入读取。"

"列出所有联系人。"

"用法：[命令] [-d description] [-t title] url-to-download\n使用系统下载管理器下载资源。\n可选项功能\n-d description	下载请求通知的描述\n-t title 下载请求通知的标题\n-p path	文件被下载到的完整路径"

"用法：[命令] [-t title] [-d description] [-s subtitle] [-c cancel]\n使用设备上的指纹传感器进行身份验证。\n注意：仅在安卓6.0及更高版本上可用。"

"用法：[命令] [文件]\n计划脚本以指定的时间间隔后运行。\n可选项	功能\n-p --pending 列出待处理的任务并退出\n--cancel-all 取消所有待处理的任务并退出\n--cancel 取消指定ID的任务并退出\n-s --script path 调用脚本的路径\n--job-id int	任务ID（会覆盖之前任何拥有相同ID的任务）\n--period-ms int 设定任务大约每隔多少ms执行一次（默认为0，表示只执行一次）。注意：从Android N开始，最小时间为900,000ms（15分钟）。\n--network text 仅当所选网络可用时运行（默认为any）：[any, unmetered, celluar, not_roaming, none]\n--battery-not-low boolean 仅当电池电量充足时运行，默认为true（Android O及以后）\n--storage-not-low boolean 仅当存储空间充足时运行，默认为false（Android O及以后）\n--charging boolean 仅当接通电源时运行，默认为false\n--persisted boolean 重启后任务是否保留，默认为false\n--trigger-content-uri text （Android N及以后）\n--trigger-content-flag int 默认为1（Android N及以后）"

"用法：[命令] [参数]\n支持以下命令：\n- list [-d]\n- delete <别名>\n- generate <别名> [-a alg] [-s size] [-u validity]\n- sign <alias> <signature>\n- verify <alias> <algorithm> <alias>\n可选项	功能\nlist [参数] 列出存储在密钥库中的密钥。\n-d 详细结果（包括关键参数）\ndelete [参数] 从密钥库中永久删除给定密钥。\nalias 要删除的密钥的别名。\ngenerate [参数] 在硬件密钥库中创建一个新密钥。\nalias	密钥的别名\n-a alg 使用的算法（RSA或EC）。 默认为RSA。\n-s size要使用的密钥大小。 对于RSA，选项为2048、3072和4096。对于EC，选项为256、384和521。\n-u validity 用户有效期，以秒为单位。 忽略该选项以禁用。 启用后，该密钥只能在设备解锁后指定的时间内使用。 持续时间过后，用户需要重新锁定并再次解锁设备才能使用此密钥。\nsign [command] 使用给定的密钥签名，从标准输入读取数据，并将签名输出到标准输出。\nalias 用于签名的密钥的别名。\nalgorithm	使用的算法，例如 'SHA256withRSA'，应该与密钥的算法匹配。\nverify [command] 验证签名。 从标准输入中读取数据（原始文件）。\nalias 用于验证的密钥的别名。\nalgorithm 用于签署此数据的算法。\nsignature 用于验证的签名文件。"

"用法：[命令] [-p provider] [-r request]\n获取设备定位。\n可选项	功能\n-p provider 位置提供方式：[gps/network/passive]（默认：gps）\n-r request 发出请求的种类[once/last/updates]（默认：once）"

"用法：[命令] [参数]\n可选项功能\nhelp 显示此帮助信息\ninfo 显示当前播放信息\nplay 如果暂停则继续播放\nplay <文件> 播放指定的媒体文件\npause 暂停播放\nstop 停止播放"
"用法：[命令] [-v] [-r] file [file...]\n扫描指定的文件，并将其添加到媒体内容提供程序。\n可选项	功能\n-r 递归扫描目录\n-v 详细模式"
"用法：[命令] [参数]\n使用设备上的麦克风进行录音。\n可选项功能\n-h 显示此帮助信息\n-d 使用默认选项开始录音\n-f <file> 开始录音至指定文件\n-l <limit> 指定录音时长（以秒为单位，无限制为0）\n-e <encoder> 指定录音编码（aac, amr_wb, amr_nb）\n-b <bitrate> 指定录音比特率（单位：kbps）\n-r <rate> 指定录音采样率（单位：Hz）\n-c <count> 指定录音声道数（1, 2, ...）\n-i	 获取有关当前录音的信息\n-q 结束录音"

"用法：[命令] [options]\n显示系统通知。内容文本使用 -c / -content 指定或从标准输入中读取。\n阅读--help-actions以获取有关操作参数的帮助。\n可选项	功能\n--action action 按下通知时执行的动作\n--alert-once 当通知被编辑时不发出警告\n--button1 text 通知上第一个按钮显示的文字\n--button1-action action 通知上第一个按钮执行的动作\n--button2 text 通知上第二个按钮显示的文字\n--button2-action action 通知上第二个按钮执行的动作\n--button3 text 通知上第三个按钮显示的文字\n--button3-action action 通知上第三个按钮执行的动作\n-c --content content 通知中显示的内容。优先于标准输入。\n--group group 通知分组（相同分组的通知会被一同显示）\n-h --help 显示此帮助信息\n--help-actions 显示关于按钮行为的帮助\n--icon icon-name 设置显示在状态栏的图标。到https://material.io/resources/icons/ 查看可用图标（默认图标：event_note）\n-i --id id 通知ID（会覆盖之前任何拥有相同ID的通知）\n--image-path path 将被显示在通知上的一张图片的绝对路径\n--led-color rrggbb 以RRGGBB表示的通知闪烁灯颜色（默认：无）\n--led-off milliseconds number of milliseconds for the LED to be off while it's flashing （默认：800）\n--led-on milliseconds	number of milliseconds for the LED to be on while it's flashing （默认：800）\n--on-delete action 当通知被清除时执行的动作\n--ongoing 将通知固定到任务栏\n--priority prio 通知优先级（high/low/max/min/default）\n--sound 随通知播放声音\n-t --title title 要显示的通知标题\n--vibrate pattern vibrate pattern, comma separated as in 500,1000,200\n--type type 要使用的通知风格（default/media）\n媒体按键动作（available with --type \"media\"）：\n可选项功能\n--media-next --media-pause|媒体-暂停键执行的动作\n--media-play 媒体播放键执行的动作\n--media-previous 媒体-上一曲按键执行的动作"

"显示当前所有通知的列表。"

"用法：[命令] notification-id移除之前通过termux-notification --id显示的通知。"

"用法：[命令] [参数]\n获取有关传感器类型以及实时数据的信息。\n可选项功能\n-h, help 显示此帮助信息\n-a, all |侦听所有传感器（警告！可能影响电池寿命）\n-c, cleanup 执行清理（释放传感器资源）\n-l, list 显示可用传感器列表\n-s, sensors [...] 要侦听的传感器（可以只包含部分名称）\n-d, delay [ms] 接收传感器数据更新之前的延迟时间（以毫秒为单位）\n-n, limit [num] 读取传感器的次数（默认：continuous） （min: 1）"

"用法：[命令] [-a action] [-c content-type] [-d] [-t title] [file]\n共享指定作为参数提供的文件，如果没有提供文件名参数，则从标准输入读取文件名。\n可选项	功能\n-a action 对共享内容执行何种操作：edit/send/view（默认：view）\n-c content-type 共享的文件类型（默认：通过文件扩展名推断，也可来自标准输入获取的文本/纯文本）\n-d 如果一个接收器已被设置为默认，则选择它而不是显示选择器\n-t title 共享内容使用的标题（默认：分享的文件名）"

"用法：[命令] [-d] [-l limit] [-n] [-o offset] [-t type]\n列出手机短信。\n可选项功能\n-d 显示信息创建时的日期\n-l limit 设置输出短信列表的限制（默认：\$PARAM_LIMIT）\n-n 显示电话号码\n-o offset 设置输出短信列表的偏移量（默认：\$PARAM_OFFSET）\n-t type 要列出的信息类型（默认：\$PARAM_TYPE）：\$SUPPORTED_TYPES"

"用法：[命令] -n number[,number2,number3,...] [text]\n将SMS消息发送到指定的收件人号码。 要发送的文本要么作为参数提供，要么在没有给出参数的情况下从标准输入读取。\n可选项功能\n-n number（s）收件人号码 - 用英文逗号分隔多个号码"

"将语音转换为文本，将匹配部分发送到标准输出。"

"用法：[命令] [文件]\n向系统请求文件并将其输出到指定文件。"

"用法：[命令] <number>\n拨打电话号码。"

"从设备上获取有关所有侦听到的小区广播（包括主要和相邻小区）的信息。"

"获取有关电话设备的信息。"

"用法：[命令] [-b bgcolor] [-c color] [-g gravity] [-s] [文本]\n在Toast通知（瞬时弹出窗口）中显示文本。 要显示的文本作为参数提供，或者如果未提供参数，则从标准输入读取。\n可选项功能\n-h 显示此帮助信息\n-b 设置背景色（默认：gray）\n-c 设置文字颜色（默认：white）\n-g 设置toast的显示位置：[top, middle, or bottom] （默认：middle）\n-s 仅短时间显示Toast通知\n注意：颜色可使用标准名称（例如：red） 或设置为以（AA）RRGGBB规定的6位和8位的16进制值（例如：#FF0000或#FFFF0000）。无效的颜色将恢复为默认值。"

"用法：[命令] [on | off]\n切换设备上的LED手电筒。"

"获取有关可用的文字转语音引擎（TTS）。可以使用-e选项将引擎的名称提供给termux-tts-speak命令。"

"用法：[命令] [-e engine] [-l language] [-n region] [-v variant] [-p pitch] [-r rate] [-s stream] [text-to-speak]\n使用系统文字转语音引擎（TTS）朗读文本。要朗读的文本作为参数提供，或者如果未提供参数，则从标准输入读取。\n可选项功能\n-e engine 所使用的TTS引擎（参考termux-tts-engines）\n-l language 所使用的语言（可能不被引擎支持）\n-n region 所用语言的区域\n-v variant 所用语言的变体\n-p pitch 用于语音的音调调节。正常音高为1.0，降低或加大该值会降低或升高成语音的音调。\n-r rate 所使用的语速。正常语速为1.0，降低或加大该值会加快或减慢合成语的语速。（0.5为正常语速的一半，2.0为二倍语速）\n-s stream 所使用的音频流（默认：NOTIFICATION），可选：ALARM, MUSIC, NOTIFICATION, RING, SYSTEM, VOICE_CALL"

"用法：[命令] [-l | [-r] [-e command] device]\n列出或访问USB设备。仅使用 [命令] 无法直接访问设备。\n可选项功能\n-l 列出可用设备\n-r 如有必要，显示权限请求对话框\n-e command 利用文件描述符来运行指定命令，引用设备作为其参数"

"用法：[命令] [-d duration] [-f]\n震动设备。\n可选项功能\n-d duration 震动持续时间（默认：1000），单位ms\n-f 强制震动，即使设备处于静音模式下"

"用法：[命令] [音频流] [音量]\n更改音频流的音量。有效的音频流有: alarm, music, notification, ring, system, call。不带参数调用以显示有关每个音频流的信息。"

"用法：[命令] [文件]\n更改设备的壁纸。\n可选项功能\n-h 显示此帮助信息\n-f <file> 从文件设置壁纸\n-u <url> 从网址资源设置壁纸\n-l 设置锁定屏幕壁纸（安卓6.0及以后）"

"获取有关当前wifi连接的信息。"

"用法：[命令] [true | false]\n开启/关闭Wi-Fi"

"获取有关上一次wifi扫描的信息。"
)

case $1 in
######
run)
  if [ -z $2 ];then
    echo -e "${h15}[INFO]$h06"
    for ((i=0;i<${#cmd[@]};i++));do
      echo -e "${h02}${cmd[i]}  $h04#${help[i]: 0: 11}...$h06"
    done
    echo -e "运行指令：termux run [命令]\n查看帮助: termux help [命令]"
  else
    for ((i=0;i<${#cmd[@]};i++));do
      if [[ ${cmd[i]} == $2 ]];then
        echo -e "${h02}termux-$2 ${@: 3}$h06"
        termux-$2 ${@: 3}
      fi
    done
  fi
;;
######
help)
  if [ -z $2 ];then
    for ((i=0;i<${#help[@]};i++));do
      echo "#───────────────────"
      echo -e "${h02}[HELP] termux-${cmd[$i]}$h06"
      echo -e "${help[$i]}"
    done | less -R
  else
    for ((i=0;i<${#help[@]};i++));do
      if [[ ${cmd[i]} == $2 ]];then
        echo -e "${h02}[HELP] termux-$2$h06"
        echo -e "${help[i]}"
      fi
    done
  fi
;;
######
-h|--help)
  echo "    _____"
  echo "   |_   _|__ _ __ _ __ ___  _   ___  __"
  echo "     | |/ _ \\ '__| '_ \` _ \\| | | \\ \\/ /"
  echo "     | |  __/ |  | | | | | | |_| |>  <"
  echo "     |_|\\___|_|  |_| |_| |_|\\__,_/_/\\_\\ "
  echo "Termux:API"
  echo "  run <name> - 执行命令
  help <name> - 查看用法
  -h --help - 显示本帮助"
;;
esac